package com.njupt.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * 和request相关的一些便利方法。
 */
public class RequestUtils
{
	private transient static Log log = LogFactory.getLog(RequestUtils.class);
	 /**
     * 将request.getParameter获得的值转化为需要的类型。
     * 对于页面上传来空串的问题，如果转换的类型不为String或String[]的话，
     * 就返回null。
     * @param request
     * @param type
     * @param paramName
     * @return
     */
	 public static Object getObject(HttpServletRequest request,String paramName,Class type){
		 Object v = request.getParameter(paramName);
		 if(v == null)return null;
		 if("".equals(v)){//如果v为空字符串，并且需要转化为的不是String或String[]，那么就返回null。
				if(type==String.class)return v;
				if(type == String[].class)return new String[]{""};
				return null;
			}
		 BeanUtilsBean utils = BeanUtilsBean.getInstance();
		 if(type.isArray()){
	    		String[] vs = request.getParameterValues(paramName);
	    		return utils.getConvertUtils().convert(vs, type);
	    	}
	    return utils.getConvertUtils().convert(request.getParameter(paramName), type);
	 }
	 /**
	     * 将request里的值转化到一个Map里去。
	     * 
	     * @param request
	     * @return
	     */
	    public static Map getParameterMap(HttpServletRequest request) {
	        Map params = request.getParameterMap();
	        Map parameters = new HashMap();
	        Iterator it = params.keySet().iterator();
	        while (it.hasNext()) {
	            Object key = it.next();
	            Object value = params.get(key);
	            if (value instanceof String[] && ((String[]) value).length == 1) {
	                parameters.put(key, ((String[]) value)[0]);
	            } else {
	                parameters.put(key, value);
	            }
	        }
	        return parameters;
	    }
}
